home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / WEBSITES / MARKWART / BIOMORPH.ZIP / !BioMorph / WWv2Data < prev   
Text File  |  1999-01-10  |  7KB  |  345 lines

  1. # WimpWorks Information File
  2. # WimpWorks © Jaffa Software 1997. All rights reserved.
  3.  
  4. DEF TASKdetails
  5.     Name        BioMorph
  6.     Purpose        Bug Breeding
  7.     Author        © Victor Markwart
  8.     Licence        FreeWare
  9.     Version        0.01
  10.     Compress    True
  11.     Memory        0K
  12.     IconbarSide    Right
  13.     IconbarPriority    &00000000
  14.     IconbarSprite    !biomorph
  15.     IconbarText    
  16. ENDTASK
  17.  
  18. DEF WEMinclude
  19.     Starter Pack
  20. ENDWEM
  21.  
  22. DEF MENUiconMenu%
  23.     BioMorph
  24.     Info
  25.         S(infoWindow%)
  26.         
  27.     Start
  28.         
  29.         PROCreinit
  30.     Quit
  31.         
  32.         CLOSEDOWN
  33. ENDMENU
  34.  
  35. DEF SUBR_PROCmenu_klik
  36.     Event    3
  37.     Every    -1
  38. DEF PROCmenu_klik(button%)
  39.  IF button%<>2 THEN
  40.    IF gen=0 THEN
  41.      OPENWINDOW(Start)
  42.    ELSE
  43.      OPENWINDOW(Biomorph)
  44.    ENDIF
  45.  ENDIF
  46. ENDPROC
  47. ENDSUBR
  48.  
  49. DEF SUBR_PROCinit
  50.     Event    0
  51.     Every    -1
  52. DEF PROCinit
  53.   DIM morph(6,12)
  54.   DIM gi(5,2), px(12), py(12)
  55.   REM Read in increments and limits (min & max) of each gene
  56.   RESTORE +1
  57.   FOR A%=0 TO 2
  58.     FOR B%=0 TO 5
  59.       READ gi(B%, A%)
  60.     NEXT
  61.   NEXT
  62.   R=RND(TIME)
  63.   DATA 1,4,0.16, 0.2, 0.16, 2: REM Gene increment value
  64.   DATA 1,-36, -3.14, 0.1, -3.14, -18: REM Gene minimum value
  65.   DATA 9, 36, 3.14, 10, 3.14, 18 : REM Gene maximum value
  66.   PROC_INTPOS: REM Initialise display position
  67.   PROC_INTP : REM Initialise gene value
  68.   gen=0
  69.   col%=&00FF0000
  70.   bug_col%=&0000FF00
  71.   SETSTATE(Biomorph, 4, TRUE)
  72.   SETSTATE(Start, 5, TRUE)
  73.   SETICON(Biomorph, 17, "Generation 0")
  74.   HIDEICON(Biomorph, 4, TRUE) : REM Parent selection - superfluous
  75.   HIDEICON(Biomorph, 1, TRUE) : REM Save - not implemented yet
  76.   PROC_LINES 
  77. ENDPROC
  78. ENDSUBR
  79.  
  80. DEF SUBR_PROC_MUTATE
  81.     Event    -1
  82.     Every    -1
  83. DEF PROC_MUTATE
  84.   a%=-1 
  85.   FOR b%=1 TO 12 
  86.     FOR c%=0 TO 5
  87.       morph(c%,b%)=morph(c%,0)
  88.     NEXT
  89.     c%=b% MOD 2
  90.     a%=a%+c%
  91.     
  92.     IF c%=1 THEN d%=-1 ELSE d%=1
  93.     
  94.     morph(a%,b%)+=d%*gi(a%,0)
  95.     IF (morph(a%, b%) < gi(a%,1)) THEN morph(a%,b%)=gi(a%,1)
  96.     IF (morph(a%, b%) > gi(a%,2)) THEN morph(a%,b%)=gi(a%,2)
  97.   NEXT  
  98. ENDPROC
  99. ENDSUBR
  100.  
  101. DEF SUBR_PROC_INTP
  102.     Event    -1
  103.     Every    -1
  104. DEF PROC_INTP
  105. morph(0,0)=3
  106. morph(1,0)=20
  107. morph(2,0)=.96
  108. morph(3,0)=1
  109. morph(4,0)=0.48
  110. morph(5,0)=0
  111. FOR i=1 TO 12
  112.   FOR j=0 TO 5
  113.     morph(j,i)=0
  114.   NEXT
  115. NEXT
  116. ENDPROC
  117. ENDSUBR
  118.  
  119. DEF SUBR_PROC_DISPLAY
  120.     Event    -1
  121.     Every    -1
  122. DEF PROC_DISPLAY
  123.   HOURPERCENT(0,12)  
  124.   CLWIN(Biomorph)
  125.   percent=100/12
  126.   PROC_LINES
  127.   FOR A%=0 TO 12
  128.     PROC_TREE(morph(0, A%), morph(1, A%), morph(2, A%), morph(3, A%), morph(4, A%), morph(5, A%), px(A%), py(A%))
  129.     HOURPERCENT(A%,12)
  130.   NEXT
  131.   REDRAW(Biomorph)  
  132. ENDPROC
  133. ENDSUBR
  134.  
  135. DEF SUBR_PROC_INTPOS
  136.     Event    -1
  137.     Every    -1
  138. DEF PROC_INTPOS
  139.   RESTORE +1
  140.   FOR A= 0 TO 12
  141.     READ px(A), py(A)
  142.   NEXT
  143.   DATA 800, 348
  144.   DATA 160, 92, 480, 92, 800, 92, 1120, 92
  145.   DATA 160, 348, 1120, 348
  146.   DATA 160, 604, 1120, 604  
  147.   DATA 160, 860, 480, 860, 800, 860, 1120, 860
  148.   flag%=FALSE
  149. ENDPROC
  150. ENDSUBR
  151.  
  152. DEF SUBR_PROC_LINES
  153.     Event    -1
  154.     Every    -1
  155. DEF PROC_LINES
  156.  
  157.   FOR x%=320 TO 960 STEP 320
  158.     FOR y%=256 TO 768 STEP 256
  159.       LINE(Biomorph, x%, 0, x%,-1023, col%)
  160.       LINE(Biomorph, 0, -y%, 1259, -y%, col%)
  161.     NEXT
  162.   NEXT
  163.   LINE(Biomorph, 640, -260, 640, -764, col%)
  164.   LINE(Biomorph, 324, -512, 958, -512, col%)
  165.   
  166.   SETICON(Biomorph, 18, "Parent Biomorph")
  167.   REDRAW(Biomorph)
  168. ENDPROC
  169. ENDSUBR
  170.  
  171. DEF SUBR_PROC_CHOSE
  172.     Event    -1
  173.     Every    -1
  174. DEF PROC_CHOSE
  175.   VDU5:MOVE 360,290
  176.   PRINT "? or Breed from CHILD (A-L)?";:*FX15
  177.   A$=GET$
  178.   A=ASC(A$)
  179.   A=A EOR 32
  180.   A$=CHR$(A)
  181.   PRINT A$;:C%=ASC(A$)-&40
  182.   IF C%<0 OR C%>12 PROC_REVIEW: ENDPROC
  183.   FOR A%=0 TO 5
  184.     morph(A%,0)=morph(A%,C%)
  185.   NEXT
  186. ENDPROC
  187. ENDSUBR
  188.  
  189. DEF SUBR_PROC_TREE
  190.     Event    -1
  191.     Every    -1
  192. DEF PROC_TREE(D,L,dA,AR,DT,DS,X,Y)
  193.   LINE(Biomorph, X, -Y, X,-(Y-L), bug_col%)
  194.   PROC_GROW(PI/2, L, X, Y, D)  
  195. ENDPROC
  196. ENDSUBR
  197.  
  198. DEF SUBR_PROC_GROW
  199.     Event    -1
  200.     Every    -1
  201. DEF PROC_GROW(TH,L,X,Y,D)
  202.   IF D<0 ENDPROC
  203.   IF AR=0 THEN AR=.1
  204.   dX=L*COS(TH+dA)*(1/AR)
  205.   dY=L*SIN(TH+dA)*AR
  206.   LINE(Biomorph, X, -Y,X+dX,-Y-dY, bug_col%)
  207.   PROC_GROW(TH+dA+DT, L-DS,X+dX,Y+dY,D-1)
  208.   dX=L*COS(TH-dA)*(1/AR)
  209.   dY=L*SIN(TH-dA)*AR
  210.   LINE(Biomorph, X, -Y,X+dX,-Y-dY, bug_col%)
  211.   PROC_GROW(TH-dA-DT, L-DS, X+dX, Y+dY, D-1)
  212. ENDPROC
  213. ENDSUBR
  214.  
  215. DEF SUBR_PROCwindow_klik
  216.     Event    12
  217.     Every    -1
  218. DEF PROCwindow_klik(window%, icon%, button%)
  219.   CASE window% OF
  220.   WHEN Biomorph: 
  221.     CASE icon% OF
  222.       WHEN 0: REM Breed
  223.         gen=gen + 1
  224.         SETICON(Biomorph, 17, "Generation "+STR$(gen))
  225.         par%=GROUPSTATE(Biomorph, 1)-4
  226.         IF par%<0 THEN
  227.           WARNING("Please choose a parent", "Biomorph")
  228.         ELSE
  229.           FOR i=0 TO 5
  230.             morph(i,0)= morph(i,par%)
  231.           NEXT
  232.           HOURON
  233.           PROC_MUTATE
  234.           PROC_DISPLAY
  235.           HOUROFF
  236.         ENDIF
  237.       WHEN 1:
  238.       WHEN 2: REM Close
  239.         CLOSEWINDOW(window%)
  240.       WHEN 3: REM Current values
  241.         par%=GROUPSTATE(Biomorph, 1)-4
  242.         IF par%<0 THEN
  243.           WARNING("Please choose a parent", "Biomorph")
  244.         ELSE 
  245.           FOR i=0 TO 5 
  246.             SETICON(Gene, 2+i, STR$(morph(i,par%)))
  247.           NEXT
  248.         ENDIF
  249.         OPENWINDOW(Gene)
  250.     ENDCASE
  251.   WHEN Gene:
  252.     CASE icon% OF
  253.       WHEN 0:
  254.         FOR i=0 TO 5
  255.           a$=READICON(window%, i+2)
  256.           IF a$="" THEN a$="1"
  257.           morph(i,0)=EVAL(a$)
  258.         NEXT
  259.         REM Check values
  260.         PROCcheck
  261.         IF button%=4 THEN CLOSEWINDOW(window%)
  262.         OPENWINDOW(Biomorph)
  263.         PROC_DISPLAY
  264.       WHEN 1:
  265.         CLOSEWINDOW(window%) 
  266.     ENDCASE
  267.    WHEN Start:
  268.      CASE icon% OF
  269.        WHEN 0:
  270.          option%=GROUPSTATE(window%, 1) - 4
  271.          a$=STR$(option%)
  272.          CASE option% OF
  273.            WHEN 1:
  274.              PROC_INTP
  275.              CLOSEWINDOW(Start)
  276.              OPENWINDOW(Biomorph)
  277.              PROC_TREE(morph(0,0), morph(1,0), morph(2,0), morph(3,0), morph(4,0), morph(5,0), px(0), py(0))
  278.              REDRAW(Biomorph)
  279.            WHEN 2:
  280.              FOR A%=0 TO 5
  281.                inc=(gi(A%,2)-gi(A%,1))/100
  282.                morph(A%,0)=RND(100) *inc + gi(A%,0)
  283.              NEXT
  284.              morph(0,0)=INT(morph(0,0))
  285.              CLOSEWINDOW(Start)
  286.              OPENWINDOW(Biomorph)
  287.              PROC_TREE(morph(0,0), morph(1,0), morph(2,0), morph(3,0), morph(4,0), morph(5,0), px(0), py(0))
  288.              REDRAW(Biomorph) 
  289.            WHEN 3:
  290.              CLOSEWINDOW(Start)
  291.              OPENWINDOW(Gene)
  292.            OTHERWISE:
  293.              WARNING("You must select an option!", "Biomorph")
  294.          ENDCASE
  295.        WHEN 1:
  296.          CLOSEWINDOW(window%)
  297.      ENDCASE
  298.    
  299.   ENDCASE
  300. ENDPROC
  301. ENDSUBR
  302.  
  303. DEF SUBR_PROCcheck
  304.     Event    -1
  305.     Every    -1
  306. DEF PROCcheck
  307.   flag%=FALSE
  308.   FOR A%=0 TO 5
  309.     msg$="Gene values should be between: "+CHR$(10)
  310.     IF morph(A%,0)<gi(A%,1) THEN
  311.       flag%=TRUE
  312.       msg$=msg$ + "Gene " + STR$(A%) + "should be > " + STR$(gi(A%,1))
  313.       morph(A%,0)=gi(A%,1)
  314.     ENDIF
  315.     IF morph(A%,0)>gi(A%,2) OR morph(A%,0)<gi(A%,1) THEN
  316.       flag%=TRUE
  317.       msg$=msg$ + "Gene " + STR$(A%) + " should be < "+STR$(gi(A%,1))
  318.       morph(A%,0)=gi(A%,2)
  319.     ENDIF
  320.   NEXT
  321.   IF flag%=TRUE THEN WARNING(msg$, "Biomorph")
  322.  
  323. ENDPROC
  324. ENDSUBR
  325.  
  326. DEF SUBR_PROCreinit
  327.     Event    -1
  328.     Every    -1
  329. DEF PROCreinit
  330.   PROC_INTP : REM Initialise gene value
  331.   FOR i=5 TO 16
  332.     SETSTATE(Biomorph, i, FALSE)
  333.   NEXT
  334.   SETSTATE(Biomorph, 4, TRUE)
  335.   
  336.   CLWIN(Biomorph)
  337.   PROC_LINES
  338.   CLOSEWINDOW(Biomorph)
  339.   OPENWINDOW(Start)
  340.   gen=0
  341.   SETICON(Biomorph, 17, "Generation "+STR$(gen))   
  342. ENDPROC
  343. ENDSUBR
  344.  
  345.